/*
Given a string `s`, find the length of the **longest substring** without repeating characters.

**Example 1:**
**
Input: ** s = "abcabcbb" **
  Output: ** 3
**Explanation:** The answer is "abc", with the length of 3.

**Example 2:**

** Input: ** s = "bbbbb" **
  Output: ** 1
**Explanation:** The answer is "b", with the length of 1.

**Example 3:**

**Input:** s = "pwwkew"
**Output:** 3
**Explanation:** The answer is "wke", with the length of 3.
Notice that the answer must be a substring, "pwke" is a subsequence and not a substring.
*/


let lengthOfLongestSubstring = string => {
  if ( string.length === 0 ) {
    return 0;
  }

  let map = {},
    max = 0,
    length = 0;

  for ( let i = 0; i < string.length; ++i ) {
    if ( string.charAt( i ) in map ) {
      length = Math.max( length, map[ string.charAt( i ) ] + 1 );
    }
    map[ string.charAt( i ) ] = i;
    max = Math.max( max, i - length + 1 );
  }
  return max;
};
module.exports = lengthOfLongestSubstring;
